//
// Created on 2023/12/25.
//
// Node APIs are not fully supported. To solve the compilation error of the interface cannot be found,
// please include "napi/native_api.h".

#ifndef MyXComponent_Vec3_H
#define MyXComponent_Vec3_H

#include <asm-generic/fcntl.h>
#include <asm-generic/stat.h>
class Vector3 {
  private:
    float dataX;
    float dataY;
    float dataZ;

  public:
    Vector3(float x, float y, float z) {
        dataX = x;
        dataY = y;
        dataZ = z;
    }

    static Vector3 add(Vector3 lhs, Vector3 rhs);
    static Vector3 add(Vector3 lhs, float rhs);
    static Vector3 subtract(Vector3 lhs, Vector3 rhs);
    static Vector3 subtract(Vector3 lhs, float rhs);
    static Vector3 multiply(Vector3 lhs, Vector3 rhs);
    static Vector3 multiply(Vector3 lhs, float rhs);
    static Vector3 divide(Vector3 lhs, Vector3 rhs);
    static Vector3 divide(Vector3 lhs, float rhs);
    static Vector3 distance(Vector3 lhs, Vector3 rhs);
    static float dot(Vector3 lhs, Vector3 rhs);
    static Vector3 cross(Vector3 lhs, Vector3 rhs);
    static float length(Vector3 lhs);
    static Vector3 normalize(Vector3 lhs);

    float getDataX();
    void setDataX(float dataX);
    float getDataY();
    void setDataY(float dataY);
    float getDataZ();
    void setDataZ(float dataZ);
};
#endif // MyXComponent_Vec3_H